/**
 * 
 */
package controleur;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

import vue.Menus;

import modele.Commande;
import modele.Produit;
import modele.util.ModePaiement;
import modele.util.StatutCommande;


/**
 * @author thameralhathal
 *
 */
public class Controler {
	
	/** 
	 * @uml.property name="lesCommandes"
	 * @uml.associationEnd multiplicity="(0 -1)" ordering="true" inverse="controler:modele.Commande"
	 */
	private List<Commande> lesCommandes;
	
	/**
	 * @uml.property  name="lesProduits"
	 * @uml.associationEnd  multiplicity="(0 -1)" ordering="true" inverse="controler:modele.Produit"
	 */
	private List<Produit> lesProduits;

	
	
	/**
	 * 
	 */
	public Controler() {
		lesCommandes = new ArrayList<Commande>();
		lesProduits = new ArrayList<Produit>();
	}

	public void afficherCommande(){
		
	}
	
	public void commander(){
		
		System.out.println(Menus.MENU_EFFACER);
		System.out.println(Menus.MENU_MENU);
		Scanner sc;
		int reponse = 0;
		boolean continuer = true;
		
		do{
			try{
				sc = new Scanner(System.in);
				reponse = sc.nextInt();
				ajoutProduit(reponse);
				System.out.println(Menus.MENU_CONTINUER);
				sc = new Scanner(System.in);
				String str = sc.nextLine();
				if(str.charAt(0) == 'O')
					continuer = true;
				else
					continuer = false;
			}
			catch(Exception e){
				reponse = 0;
			}
			
			
		}while(continuer);
		
		if(!continuer){
			double total = 0.0;
			for(Produit prod : lesProduits){
				total += prod.getPrix();
				System.out.println(prod);
			}
			System.out.println(Menus.MENU_TOTAL_COMMANDE);
			System.out.println(total);
			
			System.out.println(Menus.MENU_COMMANDE_ENREGISTRER);
			sc = new Scanner(System.in);
			String str = sc.nextLine();
			if(str.charAt(0) == 'O')
				continuer = true;
			else
				continuer = false;
			if(continuer){
				for(Produit prod : lesProduits){
					prod.create(); 
					Commande cmd = new Commande();
					cmd.setDateCommande(new Date());
					//cmd.setIdProduit(prod.getNumero());
					cmd.setPaiement(ModePaiement.CARTE_BANCAIRE);
					cmd.setPrix(total);
					cmd.setStatut(StatutCommande.ENCOURS);
					///cmd.create();
					
				}
			}
			
		}
		
		
	}

	public void bilanJournee(){
		
	}

	private void ajoutProduit(int reponse){
		switch (reponse) {
		case 1:
			//frite
			Produit frite = new Produit("frites", 10, "01:00:00", 0.60,5);
			lesProduits.add(frite);
			System.out.println("Ajout des frites....");
			break;
		case 2:
			Produit boisson =new Produit("coca - cola", 10, "30:00:00", 1.1,3);
			lesProduits.add(boisson);
			System.out.println("Ajout d'une boisson....");
			break;

		case 3:
			Produit dessert =new Produit("tiramissu", 2, "24:00:00", 1,0);
			lesProduits.add(dessert);
			System.out.println("Ajout d'un dessert....");
			break;
		case 4:
			Produit chikenCurry = new Produit("chickenCurry", 2, "12:00:00", 1.5,2);
			lesProduits.add(chikenCurry);
			System.out.println("Ajout d'un menu chicken curry....");
			break;
		case 5:
			Produit chikenMedi =new Produit("chickenMediter", 2, "12:00:00", 1.5,2);
			lesProduits.add(chikenMedi);
			System.out.println("Ajout d'un menu chicken mediterranee....");
			break;
		case 6:
			Produit doubleCheese = new Produit("doubleCheese", 2, "5:00:00", 1,2);
			lesProduits.add(doubleCheese);
			System.out.println("Ajout d'un menu double - cheese....");
			break;
		default:
			System.out.println("Entrer une valeur coherente!!!");
			break;
		}
	}


	/** 
	 * Getter of the property <tt>lesCommandes</tt>
	 * @return  Returns the lesCommandes.
	 * @uml.property  name="lesCommandes"
	 */
	public List<Commande> getLesCommandes() {
		return lesCommandes;
	}

	/** 
	 * Setter of the property <tt>lesCommandes</tt>
	 * @param lesCommandes  The lesCommandes to set.
	 * @uml.property  name="lesCommandes"
	 */
	public void setLesCommandes(List<Commande> lesCommandes) {
		this.lesCommandes = lesCommandes;
	}

	



	/**
	 * Getter of the property <tt>lesProduits</tt>
	 * @return  Returns the lesProduits.
	 * @uml.property  name="lesProduits"
	 */
	public List getLesProduits() {
		return lesProduits;
	}

	/**
	 * Setter of the property <tt>lesProduits</tt>
	 * @param lesProduits  The lesProduits to set.
	 * @uml.property  name="lesProduits"
	 */
	public void setLesProduits(List lesProduits) {
		this.lesProduits = lesProduits;
	}

	
}
